import {
  getAddProdProdTag,
  getDelProdProdTag,
  getProdProdTagList,
  getSearchProdProdTag,
} from '@/services';
import { IProdProdTag } from '@/types/modules/prodProdTag';
import { Effect, Reducer } from 'umi';

export interface ProdProdTagModelState {
  prodProdTagList: IProdProdTag[];
  prodProdTagListLength: number;
  prodProdTagDelResult:boolean;
  prodProdTagAddResult:boolean;
}
export interface ProdProdTagModelType {
  namespace: 'prodProdTag';
  state: ProdProdTagModelState;
  effects: {
    getProdProdTagList: Effect;
    getSearchProdProdTag: Effect;
    getDelProdProdTag: Effect;
    getAddProdProdTag: Effect;
  };
  reducers: {
    save: Reducer<ProdProdTagModelState>;
  };
}
const MenuModel: ProdProdTagModelType = {
  namespace: 'prodProdTag',
  state: {
    prodProdTagList: [],
    prodProdTagListLength: 0,
    prodProdTagDelResult:true,
    prodProdTagAddResult:true,
  },
  effects: {
    *getProdProdTagList({ payload }, { call, put, select }) {
      let result = yield call(getProdProdTagList, payload);
      if (result) {
        yield put({
          type: 'save',
          payload: {
            prodProdTagList: result.records.map((item: any,index:number) => {
              item.key = item.id;
              item.index = index+1
              return item;
            }),
            prodProdTagListLength: result.total,
          },
        });
      }
    },
    *getSearchProdProdTag({ payload }, { call, put, select }) {
      let result = yield call(getSearchProdProdTag, payload);
      if (result) {
        yield put({
          type: 'save',
          payload: {
            prodProdTagList: result.records.map((item: any,index:number) => {
              item.key = item.id;
              item.index = index+1
              return item;
            }),
            prodProdTagListLength: result.total,
          },
        });
      }
    },
    *getDelProdProdTag({ payload }, { call, put, select }) {
      let result = yield call(getDelProdProdTag, payload);
      if(result){
        yield put({
          type: 'save',
          payload: {
            prodProdTagDelResult: result,
          },
        });
      }
    },
    *getAddProdProdTag({ payload }, { call, put, select }) {
      let result = yield call(getAddProdProdTag, payload);
      if(result){
        yield put({
          type: 'save',
          payload: {
            prodProdTagAddResult: result,
          },
        });
      }
    },
  },
  reducers: {
    save(state, action) {
      return {
        ...state,
        ...action.payload,
      };
    },
  },
};

export default MenuModel;
